package com.youlu.campus.starter.sms.enums;

/**
 * 短信服务相关状态码枚举
 * 包含各类请求状态、错误码及对应描述
 *
 * @Description: FeiXinErrorEnum
 * @Date 2025/7/5
 * @author: su
 */

public enum SmsFeiXinCodeEnum {

    // 成功状态
    SUCCESS("00000", "提交成功"),

    // 参数错误类（F0001 - F0005）
    NOT_FOUND_APPKEY("F0001", "参数appkey未填写"),
    NOT_FOUND_APPCODE("F0002", "参数appcode未填写"),
    NOT_FOUND_PHONE("F0003", "参数phone未填写"),
    NOT_FOUND_SIGN("F0004", "参数sign未填写"),
    NOT_FOUND_TIMESTAMP("F0005", "参数timestamp未填写"),

    // 账号/权限类（F0006 - F0009）
    APPKEY_NOT_EXIST("F0006", "appkey不存在"),
    ACCOUNT_CLOSED("F0007", "账号已经关闭"),
    SIGN_VERIFY_ERROR("F0008", "sign检验错误"),
    NO_BUSINESS_UNDER_ACCOUNT("F0009", "账号下没有业务"),

    // 业务逻辑类（F0010 - F0017）
    BUSINESS_NOT_EXIST("F0010", "业务不存在"),
    PHONE_OVER_LIMIT("F0011", "手机号码超过1000个"),
    TIMESTAMP_NOT_NUMBER("F0012", "timestamp不是数字"),
    TIMESTAMP_EXPIRED("F0013", "timestamp过期超过5分钟"),
    IP_NOT_IN_WHITELIST("F0014", "请求ip不在白名单内"),
    BALANCE_INSUFFICIENT("F0015", "余额不足"),
    PHONE_INVALID("F0016", "手机号码无效"),
    NO_AVAILABLE_BUSINESS("F0017", "没有可用的业务"),

    // 内容参数类（F0022 - F0025）
    NOT_FOUND_MSG("F0022", "参数msg未填写"),
    MSG_OVER_LENGTH("F0023", "msg超过了1000个字"),
    EXTEND_NOT_NUMBER("F0024", "extend不是纯数字"),
    SIGN_NOT_REPORTED("F0025", "内容签名未报备/无签名"),

    // 短信参数类（F0039 - F0041）
    NOT_FOUND_SMS("F0039", "参数sms未填写"),
    SMS_FORMAT_ERROR("F0040", "参数sms格式不正确"),
    SMS_COUNT_OVER_LIMIT("F0041", "短信条数超过1000条"),

    // 其他状态（F0050 - F0100）
    NO_DATA("F0050", "无数据"),
    UNKNOWN_ERROR("F0100", "未知错误");

    // 状态码
    private final String code;
    // 状态描述
    private final String message;

    /**
     * 构造方法
     *
     * @param code    状态码
     * @param message 状态描述
     */
    SmsFeiXinCodeEnum(String code, String message) {
        this.code = code;
        this.message = message;
    }

    // Getter方法
    public String getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }

    /**
     * 根据状态码获取枚举实例
     *
     * @param code 状态码
     * @return 对应的枚举实例，若不存在则返回UNKNOWN_ERROR
     */
    public static SmsFeiXinCodeEnum getByCode(String code) {
        for (SmsFeiXinCodeEnum status : values()) {
            if (status.code.equals(code)) {
                return status;
            }
        }
        return UNKNOWN_ERROR;
    }

    /**
     * 判断当前状态是否为成功状态
     *
     * @return 成功返回true，否则返回false
     */
    public boolean isSuccess() {
        return this == SUCCESS;
    }

    /**
     * 判断当前状态是否为参数错误类
     *
     * @return 参数错误返回true，否则返回false
     */
    public boolean isParamError() {
        return code.startsWith("F000") && (code.compareTo("F0001") >= 0 && code.compareTo("F0005") <= 0);
    }
}